Large and complex software systems, such as transaction processing software, are composed of many thousands of separate programs. These make use of many thousands of data structures. A data structure is a description of data to be found in memory that is designed as a way of storing and organizing data in a computer so that the data can be used efficiently. A transaction processing system, such as the IBM® CICS® transaction processing system, will generally provide data structures that are declared in, for example, assembler, and resolve to a dummy section that maps the structure of the data areas used by the programs. In the CICS example, data structures are also provided in other languages such as COBOL and C. (IBM and CICS are trademarks of International Business Machines Corporation, registered in many jurisdictions worldwide.)
Since the data structure may be referenced at run-time by programs written in a variety of languages, there is often the need to declare the same data structure mapping in more than one programming language. Again, the typical requirement in the CICS example is to declare data structures in two languages, including assembler. There is an obvious requirement for the two structures to match, and resolve to the same field names, at the same offsets, for the same lengths of each field. If the data structures are not directly equivalent, unpredictable results may well occur at run-time, and the code will almost certainly not function correctly.
One approach to this problem is to generate bilingual copybooks. These declare the structure in one language. At compilation time, part of the compilation pre-processing stage takes this file as an input, and builds the corresponding assembler equivalent file as an output. In this way, the generated assembler data structure is made to match a hand-written data structure, and the two are kept in step. The problem with this approach is that not all data structures are written in a bilingual manner. There are a great many existing data structures that were hand-written in various languages, and need to be manually kept in step whenever they are changed or extended.
Furthermore, there exists the issue of disparate data structures written in the same language, which are intended to map the same structures, but which have been defined inconsistently to each other. It is possible that data structures are declared several times within part of a product. In the CICS case, parts of the product known as domains may have several data structures that are declared in a variety of places. These data structures may all map to the same underlying structures. Again, these all have to remain in an equivalent state when changes are made to the structures.